package org.dromara.quick.chat.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMappers;
import lombok.Data;
import org.dromara.quick.chat.model.vo.ImFriendsChatVO;
import org.dromara.quick.chat.model.vo.ImFriendsVO;

import java.util.Date;

/**
 * 好友表（通讯录），记录用户之间的好友关系及相关设置
 * @TableName im_friends
 */
@TableName(value ="im_friends")
@Data
@AutoMappers({
    @AutoMapper(target = ImFriendsChatVO.class),
    @AutoMapper(target = ImFriendsVO.class),
    @AutoMapper(target = ImFriends.class)
})
public class ImFriends {
    /**
     * (唯一标识) 好友表的唯一标识编号，系统自动生成，用于区分不同的好友记录
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * (发送者ID 自己) 发起添加好友请求的用户编号，关联平台用户表中的用户编号
     */
    private Long senderId;

    /**
     * (接收者ID) 接收添加好友请求的用户编号，关联平台用户表中的用户编号
     */
    private Long receiverId;

    /**
     * (健康状态) 表示好友关系的状态，0 代表正常，1 代表拉黑
     */
    private Integer healthStatus;

    /**
     * (类别) 表示好友的类别，0 代表临时，1 代表正式好友
     */
    private Integer category;

    /**
     * (类别变更状态) 表示好友类别变更的状态，0 代表等待同意，1 代表无需变更，2 代表已同意变更
     */
    private Integer categoryChangeStatus;

    /**
     * (阅后即焚) 表示阅后即焚功能的开启状态，0 代表未开启，1 代表已开启
     */
    private Integer burnAfterRead;

    /**
     * (阅后即焚时长) 表示阅后即焚的持续时长，取值范围为 0 - 60
     */
    private Integer burnAfterReadDuration;

    /**
     * (聊天记录删除) 表示聊天记录自动删除功能的开启状态，0 代表未开启，1 代表已开启
     */
    private Integer chatRecordDelete;

    /**
     * (聊天记录保密) 表示聊天记录保密功能的开启状态，0 代表未开启，1 代表已开启
     */
    private Integer chatRecordConfidential;

    /**
     * (对方截屏状态) 表示禁止截屏功能的开启状态，0 代表未开启，1 代表已开启.
     * <p>
     *     如果是用户与用户通讯录，那么这个解聘状态是针对自己在这个聊天框中是否截屏
     *     所以这个字段的值是由对方设置。
     * </p>
     */
    private Integer screenshotProhibited;

    /**
     * (创建时间) 双方首次沟通的时间，系统自动记录
     */
    private Date createTime;

    /**
     * (添加为好友时间) 接收者同意添加发送者为好友的时间
     */
    private Date friendAddTime;

    /**
     * (最后一次沟通时间) 双方最后一次进行沟通的时间
     */
    private Date lastCommunicationTime;

    /**
     * (应删除时间) 该好友关系应被删除的时间，若为空则表示为永久好友，永不删除
     */
    private Date deleteTime;

    /**
     * 用户对好友设置的备注信息
     */
    private String friendNote;

    /**
     * 拼音
     */
    private String friendNamePinyin;
}
